Embark on an adventure in the Mind Island

Project Overview
Project Type: Group (10 developers, 3 Days)
Focus: Game Production, Character Action & Animation
Role: Solo Programmer
Game Engine: Unreal 4
Language: Unreal Blueprint
Description:
Two side is a third-person adventure game, telling a story that an office worker girl, Luna, suffered
from exhaustion and tiredness of work and entered into the world of her mind. The player will fight
against demons and collect angels through the Mind Island to maintain the tranquil of Luna's mind.
In GGJ 2022, I'm the solo programmer on the team as always.
Controls:
WASD = Move
LMB = Attack
RMB = Defend
Left Shift / Alt = Roll
Space = Jump
Esc = Pause Menu
Features:
▪ Character Animation State Machine
▪ Enemy AI Behavior Tree
▪ Unlocked Action Directions
▪ Enemy Split and Respawn system
▪ HP lose/gain
▪ UI (Start Menu, Pause Menu, HUD)
▪ Win/Lose conditions
Part 01 - Character State Machine
This is the simple state machine for character animations. Just added attack, defend, and roll, these
three actions onto default state machine.
State Machine
The communication between Anim BP and Character BP is in two-ways. From Anim BP -> Character BP, I used
state Enter/Left Events to set bools for each animation state, so as to notify Character BP to trigger
according events.
Anim Event Graph

State Machine

Anim Event Graph
Part 02 - Character BP
Events for Attack and Defend will be triggered in certain states. A RotateCharacter function will be
trigger to let character instantly face to attack/defend direction.
Attack: trigger if it’s not in Roll
Defend: trigger if it’s in Idle/Run
Events for Attack & Defend
The basic idea of rolling is as such:
If it’s running, record the input direction, set Walk Speed to rolling speed, use a timeline to Add
Movement Input for a short time. When rolling is finished, set Walk Speed back to Normal.
Event for Rolling
Attack: trigger if it’s not in Roll
Defend: trigger if it’s in Idle/Run

Events for Attack & Defend
If it’s running, record the input direction, set Walk Speed to rolling speed, use a timeline to Add Movement Input for a short time. When rolling is finished, set Walk Speed back to Normal.

Event for Rolling
Part 03 - Weapon & Hit Event
The damage collision box is scaled up to make the gameplay smooth and comfortable.
Weapon Collision for Hit Event
The basic idea to implement Hit is as such:
Use OnComponentBeginOverlap to get the actor. If it’s EnemyBP, and it’s not being collected, notify
Enemy with GetHitBack event and spawn emitter hit location.
When Overlap is end, notify Enemy with ResetHit. That’s used for reset enemy AI movement.
Events for Weapon Hit

Weapon Collision for Hit Event
Use OnComponentBeginOverlap to get the actor. If it’s EnemyBP, and it’s not being collected, notify Enemy with GetHitBack event and spawn emitter hit location.
When Overlap is end, notify Enemy with ResetHit. That’s used for reset enemy AI movement.

Events for Weapon Hit
Part 04 - Enemy AI
The enemy AI controller is running a behavior tree. I used AI Perception component, in which I set AI
sight with 180 degrees for half angle and 500 for radius. I also set AI hearing with 800 for radius as
secondary detection.
Enemy Controller - On Target Perception Updated
Also, when the enemy has stimulus in range, it will change to a red material. By defaul it’s in black.
When the enemy has touched character, it will use a red base material and shrink in size, simulating the
effect that it gets into the soul of the character.
Enemy Behavior Tree
Enemy Behavior - Idle
Enemy Behavior - Detect & Attack

Enemy Controller - On Target Perception Updated
When the enemy has touched character, it will use a red base material and shrink in size, simulating the effect that it gets into the soul of the character.

Enemy Behavior Tree

Enemy Behavior - Idle

Enemy Behavior - Detect & Attack
Part 05 - Auxiliary VFX
The attack trail effect is controlled in Character BP. I used timelines to set a parameter for that
particle system to control the periods of showing and hiding.
The hit effect is just spawned once at the location where an enemy gets hit.
Attack Trail VFX
Events for Show/Hide Trail in Character BP
In order to sync the trail show/hide with animation frames, I used animation notify to communicate to
Character BP. The Character BP then will show the trail for a period of time by setting the lift time
parameter of the trail particle system.
Animation Notifies for Show/Hide Trail
The enemy dying effect is implemented by instantly setting a new material, and then set a parameter on
that material.
Enemy Dying Effect
Spawning New Enemies
Enemy Destroy Event
Damaging Effect and Healing Effect are spawned at character location when it gets damaged by an enemy
and picks up an angel collectible.
Character Damaging Effect
Character Healing Effect
The hit effect is just spawned once at the location where an enemy gets hit.

Attack Trail VFX

Events for Show/Hide Trail in Character BP

Animation Notifies for Show/Hide Trail

Enemy Dying Effect

Spawning New Enemies

Enemy Destroy Event

Character Damaging Effect

Character Healing Effect
Part 06 - Game UI
In a short 3 days, I finished the basic user interface elements, including main menu, about us, cg
scene, pause menu and game HUD. All buttons and bars are functional.
Main Menu
About Us
Pause Menu
Game HUD

Main Menu

About Us

Pause Menu

Game HUD
Reflection
I learned a lot from this Global Game Jam.
▪ First, everyone has many good game ideas. What need more is how to start removing and
defining the core, instead of adding and modifying.
▪ Those technical points that I think I could do easily, turned out to have unexpected
problems. So, always give yourself more time in your dev plan. There is a distance between that you
can do and you can do it fast and well.
▪ Trust your teammates. Everyone has his/her focus. We should believe that everyone has ability
and potential to finish a task somehow.
▪ In a limited amount of time and people, the priority of things is always important. When a
tech test shows difficulty, reconsider the priority list.
▪ To accept imperfection. Your teammates make mistakes, you make mistakes. The final executable
has bugs. But you need a good attitude to face those mistakes and bugs and correct them if
possible.
▪ First, everyone has many good game ideas. What need more is how to start removing and defining the core, instead of adding and modifying.
▪ Those technical points that I think I could do easily, turned out to have unexpected problems. So, always give yourself more time in your dev plan. There is a distance between that you can do and you can do it fast and well.
▪ Trust your teammates. Everyone has his/her focus. We should believe that everyone has ability and potential to finish a task somehow.
▪ In a limited amount of time and people, the priority of things is always important. When a tech test shows difficulty, reconsider the priority list.
▪ To accept imperfection. Your teammates make mistakes, you make mistakes. The final executable has bugs. But you need a good attitude to face those mistakes and bugs and correct them if possible.